# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# File       : bCS_TK.py
# Time       ：2022/6/13 8:27
# Author     ：author name
# version    ：python 3.8
# Description：
"""
import tkinter as tk
import bivalveCarbonSink as bCS


def BSC():
    # 标签属性
    biaoQian = [
        'methods(按数量1||按生物量2)',
        'r(碳与二氧化碳转换系数(0.272727)):',
        'N_bq(单位面积播苗数量|个每公顷):   ',
        'W_sh(贝苗壳干重|克每个):        ',
        'W_m(贝苗软体部分干重|克每个):',
        'C_ssh(贝苗壳含碳率):              ',
        'C_sm(贝苗软体部分含碳率):              ',
        'W_a(播苗总生物量|千克每公顷):',
        'R_sdw(贝苗的干湿比):',
        'R_ssh(贝苗的贝壳质量比):',
        'R_sm(贝苗的软体部分质量比):',
        'W_by(单位面积产量|千克每公顷):',
        'R_adw(成贝的干湿比):',
        'R_ash(成贝贝壳质量比):',
        'C_ash(成贝贝壳含碳率):',
        'R_am(成贝软体部分质量比):',
        'C_am(成贝软体部分含碳率):',
        'T(养殖周期|年):',
        'A_b(双壳贝类养殖面积|公顷):'
    ]
    # 需要输入的变量
    labels = ['methods',
              'r',
              'N_bq', 'W_sh', 'W_m', 'C_ssh', 'C_sm',
              'W_a', 'R_sdw', 'R_ssh', 'R_sm',
              'W_by', 'R_adw', 'R_ash', 'C_ash', 'R_am', 'C_am',
              'T',
              'A_bi',
              ]

    # --------------------1.加载主界面---------------------
    win = tk.Toplevel()  # 加载主界面
    win.title('养殖双壳贝类碳汇计量系统1.0')  # 设置标题

    # 窗口居中，获取屏幕尺寸以计算布局参数，使窗口居屏幕中央
    screenwidth = win.winfo_screenwidth()
    screenheight = win.winfo_screenheight()
    width, height = int(screenwidth * 2 / 3), int(screenheight - 100)
    win.geometry("{}x{}+{}+{}".format(1000, 700, int((screenwidth - width) / 2), 50))  # 设置窗口大小,和左上角位置
    # win.iconbitmap('img/logo.ico')
    win.resizable(False, False)  # 设置窗口不可拉伸

    # ==================================
    var_s = []  # 用于存放变量
    for var in labels:
        # 设置变量初始值为空
        var = tk.StringVar()
        var_s.append(var)
        var.set('')
    varD_C_sinks_bT = tk.StringVar()  # 碳汇量
    varD_C_sinks_bT.set('')

    # --------------------2.设置框架---------------------
    # ------------------------------------左边输入框----------------------------------
    frm00Input = tk.Frame(win,
                          relief='raised',
                          padx=6, pady=6
                          )  # 边框宽度1
    frm00Input.place(x=0, y=0, width=300, height=700)

    tk.Label(frm00Input,  # 第一行提示内容
             text='——————请输入下面一些数值—————————',
             anchor='w'
             ).grid(row=0, column=0, pady=5)

    # -------------计量方法的选择---------------：
    tk.Label(frm00Input,  # 第一行提示内容
             text='默认按数量计量(ind/hm^2)||按生物量计量(kg/hm^2)',
             anchor='w'
             ).place(x=0, y=40, width=300, height=20)
    entry = []  # 用来存放确认事件对象
    for i in range(len(labels)):
        tk.Label(frm00Input,
                 text=biaoQian[i],
                 anchor='w'
                 ).place(x=0, y=80 + 32 * i, width=200, height=20)
        entry_i = tk.Entry(frm00Input,
                           textvariable=labels[i]
                           )
        # entry_i.insert(0, "1")
        entry.append(entry_i)
        entry_i.place(x=205, y=80 + 32 * i, width=80, height=20)

    # entry[0].insert(0, "1")  # 设置默认按照数量计算
    # entry[1].insert(0, "0.272727")  # 设置转换系数默认值为12/44

    # -------------------------------中间执行框----------------------------------------
    frm01Execute = tk.Frame(win,
                            relief='solid',
                            # bg='red',
                            borderwidth=1,
                            padx=6, pady=6,
                            )  # 边框宽度1,
    frm01Execute.place(x=300, y=0, width=100, height=700)

    def login():
        # 确认按钮事件处理函数
        ls = []  # 存放输入数据
        for i in range(len(labels)):
            ls.append(entry[i].get())  # 将每一个输入框得到的数据存放在列表里面
        # print(ls)
        ls1 = ls[2:-1]
        methods = str(ls[0])
        r = float(ls[1])
        A_bi = [float(ls[-1])]
        D_C_sink_b = [bCS.carbonSequestration(methods, ls1, r)]
        # print("D_C_sink_b", D_C_sink_b)
        D_C_sinks_bT = bCS.totalCarbonSequestration(D_C_sink_b, A_bi)
        varD_C_sinks_bT.set(round(D_C_sinks_bT, 6))

    def cancel():
        # 清空用户输入的数值
        for i in range(len(var_s)):
            entry[i].delete(0, 50)
        varD_C_sinks_bT.set(' ')


    # 设置确认按钮
    buttonOk = tk.Button(frm01Execute,
                         text="确认",
                         fg="blue",
                         relief='raised',
                         command=login
                         )
    buttonOk.place(x=20, y=300, width=50, height=20)

    buttonCancel = tk.Button(frm01Execute,
                             text="删除",
                             fg="blue",
                             relief='raised',
                             command=cancel
                             )
    buttonCancel.place(x=20, y=400, width=50, height=20)

    # ---------------------------------------右边输出框---------------------------------------
    frm02Output = tk.Frame(win,
                           relief='solid',
                           )  # 边框宽度1
    frm02Output.place(x=400, y=0, width=600, height=700)

    tk.Label(frm02Output, text='总碳汇量(吨/年):').place(x=10, y=0, width=100, height=20)
    tk.Entry(frm02Output, textvariable=varD_C_sinks_bT).place(x=110, y=0, width=240, height=20)
    win.mainloop()


if __name__ == '__main__':
    BSC()
